package cn.itcast.Proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @Author : 叶荻风
 * @create : 2024/8/6 19:37
 */
public class LogInvocationHandler implements InvocationHandler {
    private Object target;

    public LogInvocationHandler(Object target) {
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 这里的 proxy 就是我们创建的代理对象
        System.out.println(proxy.getClass().getName());
        // 在方法调用之前做一些事情
        System.out.println("Before method call...");
        Object invoke = method.invoke(target, args);
        System.out.println(invoke);
        System.out.println("After method call...");

        return invoke;
    }

    public Object getProxy( ClassLoader loader, Class<?>[] interfaces){
        return Proxy.newProxyInstance(loader,interfaces,this);
    }
}
